package com.xbai.spark.core.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * distinct([numTasks])) 算子
  * 作用：对源 RDD 进行去重后返回一个新的 RDD。默认情况下，只有 8 个并行任务来操作，但是可以传入一个可选的 numTasks 参数改变它。
  * 会进行 shuffle 操作：将 RDD 中一个分区的数据打乱重组到其他不同的分区的操作。
  * 案例：创建一个RDD，使用distinct()对其去重。
  *
  * @author xbai
  * @Date 2020/12/28
  */
object Spark10_Distinct {

  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("distinct")
    val sc = new SparkContext(conf)

    val listRDD: RDD[Int] = sc.makeRDD(List(1,2,1,5,2,9,6,1))
    val distinctRDD: RDD[Int] = listRDD.distinct()
    distinctRDD.collect().foreach(println)
  }
}
